home *** CD-ROM | disk | FTP | other *** search
- /************************************************************************
- * "Epsilon", "EEL" and "Lugaru" are trademarks of Lugaru Software, Ltd. *
- * *
- * Copyright (C) 1985 Lugaru Software Ltd. All rights reserved. *
- * *
- * Limited permission is hereby granted to reproduce and modify this *
- * copyrighted material provided that the resulting code is used only in *
- * conjunction with Lugaru products and that this notice is retained in *
- * any such reproduction or modification. *
- ************************************************************************/
-
- /*
- * Modifications copyright (c) 1986 by David Dyer-Bennet
- * Permission for non-commercial use is hereby granted; all other
- * rights are reserved.
- *
- * Modifications by David Dyer-Bennet
- * Terrabit Software
- * 4242 Minnehaha Ave S
- * Minneapolis, MN 55406
- * Sysop of Fido 14/341, The Terraboard, (612) 721-8967 3/12/24 24hrs
- * (612) 721-8800 NOT 24 hrs! More like noon to midnight
- */
-
- /*
- * Revision history:
- *
- * Edit Date Who Description
- *
- * Version 1.0
- * 0 12-Nov-85 Lugaru Epsilon Version 3.01
- * 1 6-Apr-86 DD-B Add support for versions
- */
-
- #include "eel.h"
- #include "versions.h"
-
- /* Ask for a file name and save buffer to that file if one is given. */
- command write_file() on cx_tab[CTRL('W')]
- {
- char tmp[FNAMELEN];
-
- iter = 0;
- get_file(tmp, "Write file: ");
- if (*tmp) {
- filename = tmp;
- return save_file();
- }
- return 0;
- }
-
- command copy_to_file()
- {
- char tmp[FNAMELEN], orig[FNAMELEN];
-
- iter = 0;
- strcpy(orig,filename);
- get_file(tmp, "Copy to file: ");
- if (tmp[0] != '\0')
- filename = tmp;
- save_file();
- filename = orig;
- }
-
- command visit_file() on cx_tab[CTRL('V')]
- {
- char tmp[FNAMELEN];
- char resp[80];
-
- iter = 0;
- get_file(tmp, "Visit file: ");
- if (tmp[0] == '\0')
- if (!filename)
- return;
- else
- strcpy(tmp, filename);
- if (!has_arg && modified) { /* buffer need to be saved? */
- get_string(resp, "Save buffer? [y]");
- if (toupper(*resp) != 'N')
- save_file();
- }
- read_file(tmp);
- }
-
- /* read the specifed file into the current buffer */
- read_file(tmp)
- char *tmp;
- {
- int err;
-
- filename = tmp;
- err = file_read(filename, strip_returns);
- if (err == 2) {
- zap(bufname);
- modified = 0;
- say("%s: New file.",tmp);
- } else if (err)
- file_error(err, tmp, "read error");
- }
-
-
- /* user routine to save a file. used by various other user routines. Returns
- non-zero and prints message in echo area if some sort of error happened. */
- command save_file() on cx_tab[CTRL('S')]
- {
- int err;
-
- iter = 0;
- if (!*filename)
- return write_file();
-
- if (vers_edit) { /* [1] add */
- if (strcmp (filename, vers_name) == 0) {
- /* File is being saved as a versioned file */
- versions_save ();
- }
- } /* [1] end add */
-
- if (err = file_write(filename, strip_returns))
- file_error(err,filename,"write error");
- else
- say("%s written.", filename);
-
- return err;
- }
-
- command change_modified() on reg_tab[ALT('~')]
- {
- modified = has_arg? (iter != 0) : !modified;
- iter = 0;
- }
-
- list_line(inbuffer) /* insert a line into the buffer list */
- char *inbuffer;
- {
- char file[FNAMELEN], msg[80];
-
- relative(filename, file);
- sprintf(msg, " %7d %c %-16s %s\n",
- size(), modified ? '*' : ' ', bufname, file);
- bufname = inbuffer;
- stuff(msg);
- }
-
- make_buffer_list(all, inbuffer) /* put buffer list in specified buffer */
- char *inbuffer;
- {
- char *old = bufname, *s;
-
- create(inbuffer);
- zap(inbuffer);
- s = buffer_list(1);
- do {
- bufname = s;
- if (*filename != '\0')
- list_line(inbuffer);
- } while (s = buffer_list(0));
- if (all) {
- s = buffer_list(1);
- do {
- bufname = s;
- if (*filename == '\0')
- list_line(inbuffer);
- } while (s = buffer_list(0));
- iter=0;
- }
- bufname = inbuffer;
- point = 0;
- stuff(" Size Buffer File\n");
- point = 0;
- bufname = old;
- }
-
- command list_buffers() on cx_tab[CTRL('B')]
- {
- make_buffer_list(has_arg, "help");
- view_buffer("help");
- }
-
- command save_all_buffers()
- {
- char *old = bufname, *s;
-
- s = buffer_list(1);
- do {
- bufname = s;
- if (*filename != '\0' && modified)
- if(save_file()){
- bufname = old;
- quick_abort();
- }
-
- } while (s = buffer_list(0));
- bufname = old;
- }
-
- make_bname(fname, bname) /* build buffer name from file name for find-file */
- char *fname, *bname;
- {
- int uniq = 1, ok;
- char *from, *to, *oldbuf;
-
- strcpy(bname, get_tail(fname, 0));
- bname[14] = 0; /* make no long buffer names */
- if (!(to = rindex(bname, '.')) || to == bname)
- to = bname + strlen(bname);
- while (exist(bname)) {
- oldbuf = bufname;
- bufname = bname;
- ok = (size() == 0);
- bufname = oldbuf;
- if (ok) return;
- sprintf(to, "<%d>", uniq++);
- }
- }
-
- command find_file() on cx_tab[CTRL('F')]
- {
- char fname[FNAMELEN];
-
- iter = 0;
- get_file(fname, "Find file: ");
- find_it(fname);
- }
-
- find_it(fname) /* find named file (must be in absolute form) */
- char *fname;
- {
- char bname[FNAMELEN+10], *s, mode[80];
-
- if (fname[0] == '\0' || strcmp(filename, fname) == 0)
- return;
- s = buffer_list(1);
- do {
- bufname = s;
- if (strcmp(filename, fname) == 0) {
- to_buffer(s);
- return;
- }
- } while (s = buffer_list(0));
- make_bname(fname, bname);
- to_buffer(bname);
- if (has_arg) {
- strip_returns = 0;
- make_mode();
- }
- read_file(fname);
- if (*get_extension(fname)) {
- sprintf(mode, "suffix-%s", get_extension(fname) + 1);
- try_calling(mode);
- }
- }
-
- command count_lines() on cx_tab['l']
- {
- int count = 0, here = 0, start = point;
-
- sayput("Counting...");
- point = 0;
- while (nl_forward()) {
- count++;
- if (!here && start < point)
- here = count;
- }
- point = start;
- if (!here)
- here = count + 1;
- say("%d lines, point on line %d. %d bytes on disk.",
- count + 1, here, size() + (strip_returns ? count : 0));
- }
-
- command show_point() on cx_tab['=']
- {
- say("Column=%d, point=%d, size=%d", current_column(), point, size());
- }
-
- char prev_byte_name[80];
-
- char prev_state[80];
-
- command write_state()
- {
- char msg[80], fname[80], rel[80], *s;
- int err;
-
- if (!*prev_state) {
- s = lookpath("epsilon.sta");
- strcpy(prev_state, s ? s : "epsilon.sta");
- }
- relative(prev_state, rel);
- sprintf(msg, "Write current state on file [%s]: ", rel);
- get_file(fname, msg);
- if (!*fname)
- strcpy(fname, prev_state);
- if (!*fname)
- return;
-
- do_save_state(fname);
- strcpy(prev_state, fname);
- iter = 0;
- }
-
- do_save_state(fname) /* save state in file, aborting on error */
- char *fname;
- {
- char file[80], rel[80];
- int err;
-
- strcpy(file, fname);
- get_doc(); /* save doc file position too */
- sayput("Writing...");
-
- strcpy(get_extension(file), ".sta");
- relative(file, rel);
- if (err = save_state(file))
- file_error(err, file, "write error");
- else
- say("State saved on %s.", rel);
- }
-
- command set_line_translate()
- {
- strip_returns = (has_arg? (iter != 0) : !strip_returns);
- say(strip_returns ? "Add/remove return characters"
- : "No changes when reading or writing");
- make_mode();
- iter = 1;
- }
-